{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/sylvial/opt/anaconda3/lib/python3.9/site-packages/pandas/core/computation/expressions.py:21: UserWarning: Pandas requires version '2.8.4' or newer of 'numexpr' (version '2.7.3' currently installed).\n",
      "  from pandas.core.computation.check import NUMEXPR_INSTALLED\n",
      "/Users/sylvial/opt/anaconda3/lib/python3.9/site-packages/pandas/core/arrays/masked.py:61: UserWarning: Pandas requires version '1.3.6' or newer of 'bottleneck' (version '1.3.2' currently installed).\n",
      "  from pandas.core import (\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import os "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.stats import shapiro, ttest_ind, mannwhitneyu, levene\n",
    "import scipy.stats as stats\n",
    "\n",
    "from tqdm import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "warnings.simplefilter(action='ignore', category=FutureWarning)\n",
    "\n",
    "pd.set_option('display.max_columns', None)\n",
    "pd.options.display.float_format = '{:.4f}'.format"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"cookie_cats.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "data1 = data[data.sum_gamerounds < data.sum_gamerounds.max()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data1['retention'] = np.where((data1.retention_1 == True) & (data1.retention_7 == True), 1, 0) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "data1['NewRetention'] = list(map(lambda x,y : str(x) + '-' + str(y), data1.retention_1, data1.retention_7))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "data1['version']=np.where(data1.version == 'gate_30', 'A', 'B')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>userid</th>\n",
       "      <th>version</th>\n",
       "      <th>sum_gamerounds</th>\n",
       "      <th>retention_1</th>\n",
       "      <th>retention_7</th>\n",
       "      <th>retention</th>\n",
       "      <th>NewRetention</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>116</td>\n",
       "      <td>A</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>False-False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>337</td>\n",
       "      <td>A</td>\n",
       "      <td>38</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>True-False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>377</td>\n",
       "      <td>B</td>\n",
       "      <td>165</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>True-False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>483</td>\n",
       "      <td>B</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>0</td>\n",
       "      <td>False-False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>488</td>\n",
       "      <td>B</td>\n",
       "      <td>179</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>1</td>\n",
       "      <td>True-True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   userid version  sum_gamerounds  retention_1  retention_7  retention  \\\n",
       "0     116       A               3        False        False          0   \n",
       "1     337       A              38         True        False          0   \n",
       "2     377       B             165         True        False          0   \n",
       "3     483       B               1        False        False          0   \n",
       "4     488       B             179         True         True          1   \n",
       "\n",
       "  NewRetention  \n",
       "0  False-False  \n",
       "1   True-False  \n",
       "2   True-False  \n",
       "3  False-False  \n",
       "4    True-True  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "from scipy.stats import shapiro, ttest_ind, mannwhitneyu, levene\n",
    "from scipy import stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_power(effect_size, sample_size, alpha=0.05):\n",
    "     # 计算非中心参数（non-centrality parameter）\n",
    "    ncp = effect_size * np.sqrt(sample_size / 2)\n",
    "    \n",
    "    # 计算临界 t 值（双尾检验）\n",
    "    df = 2 * sample_size - 2  # 自由度\n",
    "    t_critical = stats.t.ppf(1 - alpha/2, df)\n",
    "    \n",
    "    # 计算统计功效\n",
    "    power = 1 - stats.t.cdf(t_critical, df, loc=ncp)\n",
    "    return power"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def AB_Test(df, group, target, alpha=0.05, visualize=True):\n",
    "    # split A/B group\n",
    "    groupA = df[df[group] == 'A'][target]\n",
    "    groupB = df[df[group] == 'B'][target]\n",
    "\n",
    "    # check hypothesis: normality\n",
    "    ntA = shapiro(groupA)[1] < alpha\n",
    "    ntB = shapiro(groupB)[1] < alpha\n",
    "\n",
    "    # 参数检验\n",
    "    leveneTest = levene(groupA, groupB)[1] < alpha\n",
    "\n",
    "    if (ntA == False) & (ntB == False): #正态分布\n",
    "        #方差齐性\n",
    "        if leveneTest == False:\n",
    "            ttest, p_value = ttest_ind(groupA, groupB, equal_var=True)\n",
    "            test_type = 'Parametric'\n",
    "        else:\n",
    "            ttest, p_value = ttest_ind(groupA, groupB, equal_var=False)\n",
    "            test_type = 'Parametric (Unequal Variance)'\n",
    "    else:\n",
    "        #非参数检验\n",
    "        ttest, p_value = mannwhitneyu(groupA, groupB, alternative='two-sided')\n",
    "        test_type = 'Non-Parametric'\n",
    "    \n",
    "    #计算均值差异\n",
    "    mean_diff = groupB.mean() - groupA.mean()\n",
    "\n",
    "    # 计算效应大小\n",
    "    nobs_A = len(groupA)\n",
    "    nobs_B = len(groupB)\n",
    "    pooled_std = np.sqrt(((nobs_A-1)*groupA.var() + (nobs_B-1)*groupB.var()) / (nobs_A + nobs_B - 2))\n",
    "    effect_size = mean_diff / pooled_std\n",
    "\n",
    "    # 计算观察到的功效\n",
    "    observed_power = calculate_power(effect_size=effect_size, sample_size=nobs_A)\n",
    "\n",
    "    #结果\n",
    "    ab_hypothesis = p_value < alpha\n",
    "    comment = 'A,B组无明显差异' if not ab_hypothesis else 'A,B组有明显差异'\n",
    "    \n",
    "    result = pd.DataFrame({\n",
    "        'Test Type': [test_type],\n",
    "        'target': [target],\n",
    "        'Homogeneity': ['Yes' if not leveneTest else 'No'],\n",
    "        'AB Hypothesis': ['Reject H0' if ab_hypothesis else 'Fail to reject H0'],\n",
    "        'p value': [p_value],\n",
    "        'Mean Difference': [mean_diff],\n",
    "        'Effect Size': [effect_size],\n",
    "        'Observed Power': [observed_power],\n",
    "        'Comment': [comment]\n",
    "    })\n",
    "\n",
    "    print('A/B test')\n",
    "    print('H0: A == B')\n",
    "    print('H1: A != B\\n')\n",
    "\n",
    "    print(f'normality? \\nGroup A: {not ntA}, Group B: {not ntB}\\n')\n",
    "    print(f'equal variance?  {not leveneTest}\\n')\n",
    "\n",
    "    if visualize:\n",
    "        plt.figure(figsize=(8,4))\n",
    "        sns.histplot(data = df, x=target, hue=group, kde=True)\n",
    "        plt.axvline(groupA.mean(), color='blue', label=f'Mean A: {groupA.mean():.2f}')\n",
    "        plt.axvline(groupB.mean(), color='red', label=f'Mean B: {groupB.mean():.2f}')\n",
    "        plt.title('Distribution of Groups')\n",
    "        plt.legend()\n",
    "        plt.show()\n",
    "\n",
    "    return result\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A/B test\n",
      "H0: A == B\n",
      "H1: A != B\n",
      "\n",
      "normality? \n",
      "Group A: False, Group B: False\n",
      "\n",
      "equal variance?  True\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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d9yx7jG1V111Vd2yM844g5122ol99tmn0fUffvhh9t13XyorKxkxYgTPPPNM3bKJEycyePBgBg8e3Cq/r/dDbczMrF3IfkztNtts06aPqf3pT3/Kcccdx7p16xgyZAinnnoqgwYNanKdQw45hEceeWSz8tNOO43zzjuPU089tdF1R48ezTHHHIMkZs+ezQknnMCcOXNYsWIFV155JTNnzkQSn/3sZznmmGPo1WvLbwjrM3ozM2s3CvWY2lrr1q0DaNHd9eo79NBD6d27d5N1evToUfdo2uzH1E6ZMoXDDz+c3r1706tXLw4//HAee+yxLY4FfEZvZmb1FfA5tYV4TC3AhRdeyNVXX828efM4//zz2WmnnYDMbWtHjBjBMcccs9k6zz77LMOGDWPnnXfm+uuvb/Hz4x988EEuueQSli5dWvflZtGiRZs87raiooJFi7bu1jE+ozczs3ajEI+phUzX/axZs1iyZAnTpk2r6xW46qqrGkzyw4cPZ8GCBbz00kt861vf4thjj23xvn75y19mzpw5PPTQQ3X37c8Hn9GbmdmmCvyc2rZ+TG22Hj16MGrUKJ555hkOOuigRuvtsMMOddNjx47lnHPO4f3336dv374572etQw89lLfeeov333+fAQMGMH369LplCxcuZNSoUS1uM5vP6M3MrF1py8fU1ldVVcWMGTPYfffdm6y3ZMmSujiee+45ampqNnlGfXPmzZtXt/4LL7zA+vXr6dOnD2PGjOHxxx9n5cqVrFy5kscff5wxY8Zs8f6AE72ZmbUzbfmY2loXXnghlZWV7LvvvgwdOpSvfOUrwKaPls12//33s88++zBs2DDOP/987r777roBdSeffDKf+9zneOONN6ioqOD2228H4JZbbuGWW24B4IEHHmCfffahsrKSc889l3vuuQdJ9O7dm0svvZT999+f/fffn8suu6zZgX3NaZPH1La1ESNGREPPD95StaMws7uDavkxtWZWDPyY2o6lXT2m1szMzArHid7MzKyIOdGbmRlAszeTsfahpf9OTvRmZkb37t1Zvny5k307FxEsX768wTFjjfHv6M3MjIqKChYuXMiyZcsKHYo1o3v37lRUVORc34nezMzo0qVLsw9xsY7JXfdmZmZFzInezMysiDnRm5mZFbG8JnpJPSXdL2mOpNclfU5Sb0lTJc1N771SXUm6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",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Test Type</th>\n",
       "      <th>target</th>\n",
       "      <th>Homogeneity</th>\n",
       "      <th>AB Hypothesis</th>\n",
       "      <th>p value</th>\n",
       "      <th>Mean Difference</th>\n",
       "      <th>Effect Size</th>\n",
       "      <th>Observed Power</th>\n",
       "      <th>Comment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Non-Parametric</td>\n",
       "      <td>sum_gamerounds</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Fail to reject H0</td>\n",
       "      <td>0.0509</td>\n",
       "      <td>-0.0433</td>\n",
       "      <td>-0.0004</td>\n",
       "      <td>0.0215</td>\n",
       "      <td>A,B组无明显差异</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Test Type          target Homogeneity      AB Hypothesis  p value  \\\n",
       "0  Non-Parametric  sum_gamerounds         Yes  Fail to reject H0   0.0509   \n",
       "\n",
       "   Mean Difference  Effect Size  Observed Power    Comment  \n",
       "0          -0.0433      -0.0004          0.0215  A,B组无明显差异  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "AB_Test(df=data1, group='version', target='sum_gamerounds')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1296x360 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "upper_bound = data['sum_gamerounds'].quantile(0.99)\n",
    "\n",
    "data2 = data[(data['sum_gamerounds'] <= upper_bound)]\n",
    "\n",
    "fig, axes = plt.subplots(1, 4, figsize=(18,5))\n",
    "\n",
    "# histgram about gate30\n",
    "data2[data2.version == 'gate_30'].hist('sum_gamerounds', ax=axes[0])\n",
    "\n",
    "# histgram about gate40\n",
    "data2[data2.version == 'gate_40'].hist('sum_gamerounds', ax=axes[1])\n",
    "\n",
    "# histgram about general\n",
    "data2.hist('sum_gamerounds', ax=axes[2])\n",
    "\n",
    "# compare\n",
    "sns.boxplot(x=data2.version, y=data2.sum_gamerounds, ax=axes[3])\n",
    "\n",
    "plt.suptitle('99\"%\" of orginal data w.r.t sum_gamerounds', fontsize = 20)\n",
    "axes[0].set_title('Gate 30', fontsize = 13)\n",
    "axes[1].set_title('Gate 40', fontsize = 13)\n",
    "axes[2].set_title('General', fontsize = 13)\n",
    "axes[3].set_title('Compare', fontsize = 13)\n",
    "\n",
    "data2.groupby('version')['sum_gamerounds'].agg(['count','median', 'mean', 'std', 'max'])\n",
    "\n",
    "data2['version']=np.where(data2.version == 'gate_30', 'A', 'B')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A/B test\n",
      "H0: A == B\n",
      "H1: A != B\n",
      "\n",
      "normality? \n",
      "Group A: False, Group B: False\n",
      "\n",
      "equal variance?  True\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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X00olEzDAwcOBOBf//oXp59+OnvuuecW5TsjKwe1ERGRHXfZZTBnTtduc+xY+NOfOq531llncd1113HyySfz3nvvcd555/Hqq68CcOONN3Lsscdy9913s2HDBsaPH8+XvvQlBg4cyLRp04hEIixcuJBvfvObLV3p7777LvPmzWPIkCF8/vOf57///S9HHXXUFvtsaGjghRde4O9//zsbNmxg8uTJHHnkkQBccMEFfO9732PcuHFbrPPOO++wYsUKvvKVr3DLLbe0lNfW1nLzzTczbdq0drvtARYvXsxDDz3EY489RmlpKbfffjujRo3i448/pqmpiQkTJlBTU8Oll17K2Wef3YkWbp+u6EVEpMcYM2YMS5cuZfLkyUycOHGLZc8//zw33XQTY8eOZcKECTQ0NLB8+XKampq48MILOfjggznzzDP58MMPW9YZP348ZWVlhEIhxo4dy9KlS7fa51NPPcUXv/hFCgoK+NrXvsbjjz9OPB4H4K677toqyScSCS6//HJuu+22rbZ17bXX8uMf/5ji4uJtHmc0GiUSiTBr1iwuvPBCzjvvPCD5rMDs2bN5+umnee6557j++uv5+OOPO9V27dEVvYiIbKEzV97pdMopp/DTn/6UGTNmUFlZ2VLu7jz66KPst9+WQ3Rfe+21DBo0iLlz55JIJLboSs/Pz2+ZDofDxGKxrfY3efJkXnvtNZqHN6+srOSll17iy1/+cpvx1dTU8MEHHzBhwgQA1qxZwymnnMLUqVOZOXMmU6ZM4ec//zkbNmwgFAoRiUS4+OKLt9hGWVkZp59+OgBf/epX+e53v9tS3r9/f4qKiigqKuKYY45h7ty57Lvvvp1sva3pil5ERHqU8847j2uuuYaDDz54i/ITTjiBO+64o+U++7vvvgtAdXU1gwcPJhQKcf/997dcjXfGxo0befXVV1m+fDlLly5l6dKl/OUvf2Hy5MntrlNSUkJFRUVL/SOOOIKpU6cybtw4Xn311Zbyyy67jF/+8pdbJXmA0047jenTpwPw8ssvtyTyU089lddee41YLEZdXR0zZ85k9OjRnT6etijRd4K7U7WxTl+vExHpBmVlZVxyySVblV911VU0NTUxZswYDjzwQK666ioAfvCDH3DvvfdyyCGHsGDBAoqKijq9r8cee4xjjz12iyv/U089lSeffJJoNMoFF1yw1VfndtTEiRP59NNPAbjyyit59NFHOfjgg/nFL37BXXfdBcDo0aM58cQTGTNmDOPHj+eCCy7goIMO2qn9WjYmr3HjxnlX/WIA5s+fz2/v+Bu//NH3dvrMqivM6TMBgLEbZmQ0DhHJHvPnz+8R/79J57T1+zKz2e4+rnVdXdF3UkFh588QRUREegolehERkSymRC8iIpLFlOhFRESymBK9iIhIFlOiFxERyWJK9CIi0iNkapjac889lxEjRjB27Fj2339/fvOb33R63bfffpucnBymTJmyRfnGjRspKytr82U5qW677TbMrGV0VHfnkksuYZ999mHMmDG88847239ArSjRd5ZDVVWVxqUXEUmTTA5Te8sttzBnzhzmzJnDvffey5IlSzpcJx6Pc8UVV3D88cdvteyqq67imGOO2eb6K1as4Pnnn28ZqQ7gP//5DwsXLmThwoVMmjSJ73//+9t/MK0o0XdSQ1MT9a9PouLp32pcehGRNMnUMLXNGhoaADr1dr077riDr33ta1sNJTt79mzWrl3b5glAqh//+Mf8/ve/x8xayp544gnOPvtszIwjjjiCDRs2sHr16g5j2RYNarMd+vaKMKCkMNNhiIikVwbHqc3EMLUAP/vZz7jhhhtYtGgRl1xySUvyvvrqqxk3bhynnHLKFvVXrVrFY489xvTp03n77bdbyhOJBD/5yU944IEHeOGFF9o9zieeeIKhQ4dyyCGHbLXdYcOGtcyXlZWxatUqBg8e3GHbtUeJXkREeoyOhqmdOnVqyzjvzcPUDhkyhIsvvpg5c+YQDoe3GNa1eZhaoGWY2rYS/S233MIZZ5xBbW0txx13HK+//jpHHnkk1113XZtxXnbZZdx8882EQlt2jN95551MnDixZZ9tqaur47e//S3PP/985xplJynRi4jIljI8Tm13D1Obqri4mAkTJvDaa69x5JFHtltv1qxZnHXWWQBUVFTwzDPPkJOTwxtvvMGrr77KnXfeSW1tLY2NjRQXF3PTTTe1rLt48WKWLFnScjW/cuVKDjvsMN566y2GDh3KihUrWuquXLlyp59T0D16ERHpUbpzmNrWYrEYM2fOZO+9995mvSVLlrQMR3vGGWdw5513ctppp/HPf/6zZcjbW2+9lbPPPnuLJA9w8MEHs27dupb1y8rKeOedd9hjjz045ZRTuO+++3B33nzzTUpKSnaq2x6U6EVEpIfpzmFqm/3sZz9j7NixjBkzhoMPPpjTTz8dSN6jnzp16s4dUKAzQ95OnDiRkSNHss8++3DhhRdy55137vR+NUxtJ8yfP5/f/fVuLj1gI3sOGgBHXUZpaWmXbX97aZhaEelqGqZ216JhakVERARQohcREclqSvQiIgKgt37uIrb396RELyIiRCIRKisrlex7OHensrJyi68QdkTfoxcREcrKyli5ciXl5eWZDkU6EIlEtvlCntaU6EVEhNzcXEaMGJHpMCQN1HUvIiKSxZToRUREspgSfSe5O+tr6qmo3qSHVUREZJehRN9J0YZ6Jn86mL8tLNlikAUREZGeLO2J3szCZvaumT0VzI8ws5lmtsjMHjKzvKA8P5hfFCwfnrKNXwTlH5nZCemOuT0FhUUUFRVnavciIiLbrTuu6C8F5qfM3wz80d33AdYD5wfl5wPrg/I/BvUwswOAs4ADgROBO80s3A1xi4iI7PLSmujNrAz4CnBXMG/AscCUoMq9wGnB9KnBPMHy44L6pwIPunvU3ZcAi4Dx6YxbREQkW6T7iv5PwM+BRDDfH9jg7rFgfiUwNJgeCqwACJZXB/VbyttYp4WZXWRms8xsll74ICIikpS2RG9mJwPr3H12uvaRyt0nufs4dx+XySFkRUREepJ0vhnv88ApZjYRiAC9gT8DfcwsJ7hqLwNWBfVXAcOAlWaWA5QAlSnlzVLXERERkW1I2xW9u//C3cvcfTjJh+lecvdvAdOBM4Jq5wBPBNNTg3mC5S958gvrU4GzgqfyRwCjgLfSFbeIiEg2ycS77q8AHjSzG4B3gX8E5f8A7jezRUAVyZMD3H2emT0MfAjEgB+6e7z7wxYREdn1dEuid/cZwIxg+hPaeGre3RuAM9tZ/0bgxvRFKCIikp30ZjwREZEspkQvIiKSxZToRUREspgSvYiISBZTohcREcliSvQiIiJZTIleREQkiynRi4iIZDElehERkSymRC8iIpLFlOhFRESymBK9iIhIFlOiFxERyWJK9CIiIllMiV5ERCSLKdGLiIhkMSV6ERGRLKZELyIiksWU6EVERLKYEr2IiEgWU6IXERHJYkr028lxqqqqcPdMhyIiItIhJfrtVB+N8elzt1NRUZHpUERERDqkRL8D+hTnZzoEERGRTlGi307uzobaBnXdi4jILkGJfjvV19Xx4Mr+VFZWZjoUERGRDinR74BIQUGmQxAREekUJXoREZEspkQvIiKSxZToRUREspgSvYiISBZTohcREcliSvQiIiJZLG2J3swiZvaWmc01s3lm9pugfISZzTSzRWb2kJnlBeX5wfyiYPnwlG39Iij/yMxOSFfMIiIi2SadV/RR4Fh3PwQYC5xoZkcANwN/dPd9gPXA+UH984H1Qfkfg3qY2QHAWcCBwInAnWYWTmPcIiIiWSNtid6TaoPZ3ODjwLHAlKD8XuC0YPrUYJ5g+XFmZkH5g+4edfclwCJgfLriFhERySZpvUdvZmEzmwOsA6YBi4EN7h4LqqwEhgbTQ4EVAMHyaqB/ankb64iIiMg2pDXRu3vc3ccCZSSvwvdP177M7CIzm2Vms8rLy9O1GxERkV1Ktzx17+4bgOnA54A+ZpYTLCoDVgXTq4BhAMHyEqAytbyNdVL3Mcndx7n7uNLS0nQchoiIyC4nnU/dl5pZn2C6APgyMJ9kwj8jqHYO8EQwPTWYJ1j+kifHgp0KnBU8lT8CGAW8la64RUREsklOx1V22GDg3uAJ+RDwsLs/ZWYfAg+a2Q3Au8A/gvr/AO43s0VAFckn7XH3eWb2MPAhEAN+6O7xNMYtIiKSNdKW6N39PeDQNso/oY2n5t29ATiznW3dCNzY1TGKiIhkO70ZT0REJIsp0YuIiGSxTiV6M/t8Z8pERESkZ+nsFf0dnSwTERGRHmSbD+OZ2eeAI4FSM7s8ZVFvQO+bFxER6eE6euo+DygO6vVKKd/I5u/Ci4iISA+1zUTv7i8DL5vZPe6+rJtiEhERkS7S2e/R55vZJGB46jrufmw6ghIREZGu0dlE/wjwN+AuQG+lExER2UV0NtHH3P2vaY1EREREulxnv173pJn9wMwGm1m/5k9aI+vBEu4sXryY+fPnk0gkMh2OiIhIuzp7Rd88qtzPUsocGNm14ewaamtqmfzsdIojb3DZ+d9m9OjRmQ5JRESkTZ1K9O4+It2B7Gr6lpTQu6gg02GIiIhsU6cSvZmd3Va5u9/XteGIiIhIV+ps1/1nU6YjwHHAO4ASvYiISA/W2a77H6XOm1kf4MF0BCQiIiJdZ0eHqd0E6L69iIhID9fZe/RPknzKHpKD2YwGHk5XUCIiItI1OnuP/taU6RiwzN1XpiEeERER6UKd6roPBrdZQHIEu75AYzqDEhERka7RqURvZl8H3gLOBL4OzDQzDVMrIiLSw3W26/5XwGfdfR2AmZUCLwBT0hWYiIiI7LzOPnUfak7ygcrtWFdEREQypLNX9M+a2XPA5GD+G8Az6QlJREREuso2E72Z7QMMcvefmdnpwFHBojeAf6Y7OBEREdk5HV3R/wn4BYC7/xv4N4CZHRws+39pjE1ERER2Ukf32Qe5+/utC4Oy4WmJSERERLpMR4m+zzaWaYxWERGRHq6jRD/LzC5sXWhmFwCz0xOSiIiIdJWO7tFfBjxmZt9ic2IfB+QBX01jXCIiItIFtpno3X0tcKSZfRE4KCh+2t1fSntkuwB3p6qqivLycgYMGICZZTokERGRLXR2PPrpwPQ0x7LLqaurZdL0BfR5dw2/+vrRDBw4MNMhiYiIbEFvt9sJ9dE4uRuXYeUfUVlZmelwREREtqJEv5MiuTkU5udmOgwREZE2pS3Rm9kwM5tuZh+a2TwzuzQo72dm08xsYfCzb1BuZna7mS0ys/fM7LCUbZ0T1F9oZuekK2YREZFsk84r+hjwE3c/ADgC+KGZHQBcCbzo7qOAF4N5gJOAUcHnIuCvkDwxAK4BDgfGA9c0nxyIiIjItqUt0bv7and/J5iuAeYDQ4FTgXuDavcCpwXTpwL3edKbQB8zGwycAExz9yp3Xw9MA05MV9wiIiLZpFvu0ZvZcOBQYCbJ1+quDhatAQYF00OBFSmrrQzK2itvvY+LzGyWmc0qLy/v2gMQERHZRaU90ZtZMfAocJm7b0xd5u4OeFfsx90nufs4dx9XWlraFZtsV69QlKNCc7gkMpUDbEla9yUiIrIzOjse/Q4xs1ySSf6fweh3AGvNbLC7rw665tcF5auAYSmrlwVlq4AJrcpnpDPubSminlv3/A+9w400epg9qeDPPjxT4YiIiGxTOp+6N+AfwHx3/0PKoqlA85Pz5wBPpJSfHTx9fwRQHXTxPwccb2Z9g4fwjg/KMuJzuQvoHW7k9tgZ3FR/JkU08JX4tEyFIyIisk3pvKL/PPAd4H0zmxOU/RK4CXjYzM4HlgFfD5Y9A0wEFgF1wHcB3L3KzK4H3g7qXefuVWmMexucY3LnMb+hP7ND+7GMPuwR38RF9iTL18yE0aMzE5aIiEg70pbo3f01oL2Xvx/XRn0HftjOtu4G7u666HbMPraSAbaRbzddzaLcfSEEf4ydzgnht+j38cPwxXMzHaKIiMgW9Ga87XBU6D2eiY9nUe6+jLS1HBb/kAZyuTx2MUVrZkJdhjoaRERE2qFE30kF1sghtpBJsZPJjdWxv61kgG9gtK1idnxvpjR9HhY8lekwRUREtqBE30n75lWw2vvzASPpW7eMUHBTYoSto2+onnv9K/DBo5kNUkREpBUl+k7aN6+cB+LHYe7027SspdwMRuZWMy9exoLFn0CtXtYjIiI9hxJ9J43Mq+Lh+Bcp9SpyEw1bLNsrdwM55jwaOwo+fDwzAYqIiLRBib4zEnEacnqzgWIG+9ZX7ImmKPuxgsf8C8Q+fiEDAYqIiLRNib4T8jd+wvvsDUDfLd/i22JC0TIqEr14ZfEGiDd1Y3QiIiLtU6LvhIKKD5iV2I/ebCKPWJt1DspdTZ+8BE9GD4WVs7o5QhERkbYp0XdCfsX7zErsS4nVtbnc3andVM/nhpcwIzGW+OIZ3RugiIhIO5ToO2HN2rVsoBf92NTm8vq6Oh5c2Z8xexSwnl7M+XBBN0coIiLSNiX6jmyqZG5tbwD6Wm271fILCti7oIEQzktr8qGh7Xv5IiIi3UmJviOxev5b9CXyEw0UEW23WmNTnNCsuzgwfx3T44fAste7MUgREZG2KdF3pKSMWfFRFDZtwNoboofkfXpwxvXawIc+nDUL3ui2EEVERNqjRN+BdRsbWFMbozi2fpv1GhvqmfzpYJZWNQIw46N13RGeiIjINinRd8DM+J9D+tCnqeNX2xYUFrFHUZhBeVFe2jAIatZ2Q4QiIiLtU6LvQGmvfL4zth8F8fYfxNuCOWP6O68nDqRx0Yy0xiYiItIRJfouVtfQxJDyN6ilkDdn68U5IiKSWUr0Xay+ro6lm/IIE+f1lU3gnumQRERkN6ZEnwa9CiMMD1XwSnQUVC7KdDgiIrIbU6JPk9Kcej704ayb90qmQxERkd2YEn2a9MmJA/DKvCUZjkRERHZnSvRp0jccpX+4npdX50C87RHvRERE0k2JPl3MObRvA6827U98hZ6+FxGRzFCiT5P6aIyh699lA72YO2dmpsMREZHdlBJ9mrg7I0LrMJyXP67MdDgiIrKbUqJPk/q6Op5cVcyBhdW8vL4/NFRnOiQREdkNKdGnUaSggM8OyWeuj2T9gtcyHY6IiOyGlOjTyIERA/vihHj13Q8yHY6IiOyGlOjTqLEpzh4L7qfENvHS0qhehysiIt1OiT6N3J2QJTgysoKXovvTuHpepkMSEZHdjBJ9GjU21DP508HURxvZSBFvvKHX4YqISPdSok+zgsIiBhXlUmhRnl2gJ+9FRKR7KdF3g7A5R/XdwPM1exGrXpPpcEREZDeiRN9NPrf3ACop4a03Xsp0KCIishtJW6I3s7vNbJ2ZfZBS1s/MppnZwuBn36DczOx2M1tkZu+Z2WEp65wT1F9oZuekK950G7vPSCI08p/3Vmc6FBER2Y2k84r+HuDEVmVXAi+6+yjgxWAe4CRgVPC5CPgrJE8MgGuAw4HxwDXNJwe7koQnWLViKceVbuSpqqFEN1ZkOiQREdlNpC3Ru/srQFWr4lOBe4Ppe4HTUsrv86Q3gT5mNhg4AZjm7lXuvh6YxtYnDz1e1fqN/P2hqRyzdx/W04sXXno+0yGJiMhuorvv0Q9y9+a+6zXAoGB6KLAipd7KoKy98q2Y2UVmNsvMZpWXl3dt1F2gd+9iDtxnH4aEq3novQ2ZDkdERHYTGXsYz92d5Ftiu2p7k9x9nLuPKy0t7arNdqlwOMQZw6O8WjeMT1d8kulwRERkN9DdiX5t0CVP8HNdUL4KGJZSrywoa698l+NAVVUVXxp3AE6IKS9okBsREUm/7k70U4HmJ+fPAZ5IKT87ePr+CKA66OJ/DjjezPoGD+EdH5Ttchqb4tS/PoncuQ9yZGQp/1qUS2NTPNNhiYhIlkvn1+smA28A+5nZSjM7H7gJ+LKZLQS+FMwDPAN8AiwC/g/4AYC7VwHXA28Hn+uCsl1S314RBpQU8p2Di1gT783jL8zIdEgiIpLlctK1YXf/ZjuLjmujrgM/bGc7dwN3d2FoGeHurK+ppzCyicO+fCwHvPMMf3uzN187wQmHLNPhiYhIltKb8bpJ8wA3f1tYQtXGTXx/dCOfREt4/i2NaCciIumjRN+NCgqLKCwsoqqqisMPP5q9bC23vzCfeELj1IuISHoo0Xez+rpN3PfGUv7wyhouGfIR82sLefj1jzIdloiIZCkl+m7mOJabTyg3nwnHnsQ4+4hbn1tAdX1TpkMTEZEspETfzeqjcWKr3qNu8ZusCw3i2v2WUdUU5s/Pvpfp0EREJAsp0WdAJDeHwvxcAA6a+D2+GZ7O/zdzNW9+UpnhyEREJNso0WdIwhMsXryYxID9+NXYeobbWn48eRbVderCFxGRrqNEnyHNI9p99NFHFJ5wNX8o/AflNVF+PmUua9eto7y8nOTrBURERHZc2l6YIx3r1Sv5VbsFQHFePldGJ3PDh99m+eq1HDIgxE9OGUdPHaBHRER2DUr0GdTQUM+k6QuIRCKc3DSU4/Ln8ZG/zCPrv0C/XgWZDk9ERLKAuu4zqKkpTu7GZVjlYuqjUSb3+z7X5N7P4TkLeX35Jp6ZV055ebm68UVEZIcp0WdYJDeH/Nwwn1bUsOrTNfyr4WjuCd/IAXnruPbZJVz8wFvcNnUWFRUVmQ5VRER2QUr0PUB9XR3PVAzAgA/Do3m7aAJT7OeMsNXMXAuL6yK6ohcRkR2iRN9D5Ec235N/vPe3+aTwEJ7Ju5JDCit5e1Ud1zy1gNVr1ynhi4jIdlGi72Ecpy7axN0FF7KEMqbEL+PYouX85+Mavvr3t1m6am2mQxQRkV2IEn0P0/yK3IrF73D1kkNZnH8Ad8ev5Dsl77G2Di588EMSuqoXEZFOUqLvgZIP6OUQz8nnjsKLmZV/BNdHb+L6kidZs7GB2micpriSvYiIdEyJvgdraooT/fRDJlV+hid6/Q/fjD7EA1xDyJz6phi/njKbxlg802GKiEgPpkTfw0VycyjIz+E/Ocfxv72vYEi4iiKvI9cSPDBrDV//62usqKrLdJgiItJDKdHvAprv27+zbD3fX3wMMXIo8AZ+nzuJhWuqOeFPL3P/G0tJJNSdLyIiW1Ki30U037dv9ByaCNPgeewbXsvzOZdxWPx9rnpiHv/z99dYXqmrexER2UyJfheVwLjiowOZVH0kl/u/uDlnEh8sW8MJt03jtsdepzYay3SIIiLSA2hQm11YXk6IyqJ9+Vt0L/o0reb6gr8xjSO5Y+YR/GvWY5w9ooZjx43lwDFjCYV0TicisjtSos8SdcXD+U90MLENK7j7mAL+vrCYPy7amymL5vKNFx7jq8eMJ2/4eAaUDsTMMh2uiIh0E13mZZlofj8Gf/arXHPWcZwVeZs8i3FrxRGc+O8G/nL771jw0NWwchaeiGtkPBGR3YCu6LOUhUKE8ooYWbuUnKr5DBo6hAeajuWeOWE+O/dlToz8haMKllFQ3I+Kr/6R0sHDMh2yiIikgRJ9ljMgr6mG3NpyPtO4juVNvVjafx+ur98fq08wfv0Cjrvzl4wb0MiQsr0ZeMTXCQ0eA7qnLyKSFZTodxMFhUWEw1EGbFzOoHgT9aEi+kecuU1D+W3TAbAaSlev5+jZD/LZvN8xZmAu++83mvCe46FsHBT0zfQhiIjIDlCizzIOVFVVtUy3JZKbQyi6kU3VMfaKriFUtYneI8ZSFc/nmcRn+HfiaFgOvZbXMTY0iwNtCqOKo+xTWsywIXsQLt2X3vscjvXZE/Rgn4hIj6ZEn2Uam+LUvz6JhianKbb/Nusmr/JzKK7ZxLBQJYOaopSsXUev0qFUxgvYlNObD8PDeN0OIF6dA9WQsyjGCFvDfvZ/7B1eR1lhE3sUOHsN6kOffoPw3mUkepfRZ9h+WNFAPBSmoqKCAQMGtDzt7+5blYmISHoo0WeZ5BP0zZ/tZ0D/ghC9ohvJy4/SGF3JkmUr6Ddsb6pjecQK+hBNhHnFR/N04nC8OgTVwBooop5hto5h9gp72OMMsvWU5jTQ39czaEA/Bvcrof+gMmqtiIp3XmDT4efQe/De9C0bhUVK1DsgIpIGSvRZprGhnsmfDqYpGqV33655O14kkk9pgVESrSUvp4nGaJTVa9cxYEB/appClDeEyC8pJeohNuUUMMf2po7RbLIiaA5hVfLT6/06Btp6+nMcfZ+dTz97m77U0CdUR7+IUZJvlBTkUVwQIZSTS2FhESUDy/DCUuKRfnhhf7ywP/0HDqayshJAPQMiItugRJ+Fmrvk062osJDcaJRo9Vr2iuTRGI2Sl5tPYzTK0mXL2HvUftQ0wtK16ykZvBd18RANnsumUC4JK+ST8GDqPZd6IiQsDE1Azdb7yaOJ3tTRyxbTm/fpZXUUW5Ri6ikMNdK7V296FxXQqyCf/v360bt3CYWFReTlF9DQGCM/UkheQRFDyvYiEinA9I0CEdmNKNFLWuRHCgibU0iUvtSwV241jYkoeZHgRGDpMo7Yd18ao1Fy8/KJFBWy1+ChvL1oBVW1jVTW1DNgj6HEY3EgQSKRoDGeYFN+IRvoT4OHaQwVUBePEK3Kg6rWEUSDD0Bt8HMJkDxxiNBIxGLkWYyIxcgPxcmzOPmhBJFQgkiOkR+GHGIU5uWQHzZCHicvDLkhIy83TH5OmEGlA0jE4+Tn5pCXl0d+Xh4D+vcnGm0kNy+PvPwIkUghA/cYQtWGamBzD0TzswqpZSIiXW2XSfRmdiLwZyAM3OXuN2U4JNkJ+ZGClmkziEWjbHzl/xg08ksUNNYTiq1jr1A+jR4lLz95crC6ch177Tms5dZB83RTPE59Y5x1VdXsMbAfOfEmcvPCWCJOU1OM4l5FeCJBQ0OU3IICYgnDQznEEiEaE4bn5BOLh2lMhIiG8qgghybLo9FziJJDI7lEyaOprT+Xj1oXNAKrt6oW4n0iNJJPEzmWIIcEORbHPEGYBPlhJzds5JgTxgmbJ6dDkGcJcszJC0FuyMkJJacL8nKwRIzcsFGYn0t+ToickBGPNREKGf379WPjxo2ELERxURG9S3qTG84hFA4TCoUpLy+npKSEUDhMOJxDOBSipraGfn37kp+bS+mA/uTl5pCbEyYvJwcLhaisWk//AaVYKAwWBgslP6GwnrEQ6aF2iURvZmHgL8CXgZXA22Y21d0/zGxk0lXq6+p4ZdMQ9t2BUfeKCgvJDUfZlOP0Ky5M3kIITg6qKtfRq09/mmJRytfXslevvng0Sl5OmMZolPVrtzx5GBlMJ0JhmqJRqqqqGDigX/KZhz59aWpsoKKigj2HDKIgkkNpcQGrKqqoq28gnJNLIh6npq6B3n36Ek8kwELEEtDQFCc3UkDcjcamOOHcPBIJg1CYhBuxRoecfBIYjXHHLUycEDFyiBGmiRyagpOOJsI0kksjOXiHb7EuTJmOB59mETb3eqSqCH5uecISJk4uMXKJkRf8zLVkmeHBh5afIdty3nDMUpYDmBPCMQxrqb+5brIOhMwIGeDesgwsZR8E2079aVjz+ql1Wtbd/NNS9gMp65u12q4F055c5o6FLCVmIwTk5eURDhl5eXls2lRL8ylQJJKHYTQ1RjEMxwmnxNTcPqEgUHOnoLAAw2iMNrT8LooKCwEnGm2gsKAQM6OoqJBQEG99fT04hEKGOdTV11FUVJQ8subjdKeuvh4MiguLKe5V3HLM7rBu3TqKiooImeFAXV0dYBQXF2EWwszo3asYCxm1NbX07t0bC1lwHMkjrq2tTWnPEL1796amNtkeJX1KktsJaiRwVq1aRVnZMEKhULCN5NINGze2HHvfvsl3elRXbwSMvn37JE82U/YLtlUsWKvlwXGtX78++S/QQvTv3w+zUEv95u0Y1hJT8wBhFrJke0NLu7f8GwnaePO/ucyeBO8SiR4YDyxy908AzOxB4FSg2xJ9Tc0mcvOriUUb2VS7ifXVyemc/LxOle3s8tQydwcn43F09TZjsUSPjLOhpDexpjjrN24kFm1kffUmIsX1xMobeXH5cvYZtQ+xaIKcfCcWjVFeUc3gnMIttlNeUcngoYO3mI4Hyz3aSFVFJf1KB5JojFJbXd1SN3X9PVuVrVy1kpEjRxBvbGTN2rUMGjiAeDxGUa9eeFOMdeVrGTp0CN4UY31NDb0KC/BEjFA4FzxOIh4nUhCBRPOJR4JoYxN5kQiJuLOpMUZepJC4g4dySTg0xp1QboR4cEISysknTij4T9OJxxOEc3JwpyVhxBMJwuEwCSCRcELhMO5A8B9tIuHJHgKCMjcS7lgolFzuRigcBoeEB98pCdaH5JDNyW01n0Ik19lcBslE0lw/1GGZs3ldb6m35bJEp4cKycTLpopbzRe1U68gZbqx1bLe29hmIvhZnVK21f2zNmxKmW7jgRwAlnawjXWt5j/txH4zL5Tyr6f5X9sT396L0QcdmvZ9264woImZnQGc6O4XBPPfAQ5394tT6lwEXBTM7kcbnao7aQCbL3Vkx6kdu4baseuoLbuG2rFr7Ew77uXupa0Ld5Ur+g65+yRgUrq2b2az3H1cura/u1A7dg21Y9dRW3YNtWPXSEc77irfM1oFpA6vVhaUiYiIyDbsKon+bWCUmY0wszzgLGBqhmMSERHp8XaJrnt3j5nZxcBzJL9ed7e7z+vmMNJ2W2A3o3bsGmrHrqO27Bpqx67R5e24SzyMJyIiIjtmV+m6FxERkR2gRC8iIpLFlOg7YGYnmtlHZrbIzK7MdDw9nZndbWbrzOyDlLJ+ZjbNzBYGP/sG5WZmtwdt+56ZHZa5yHsWMxtmZtPN7EMzm2dmlwblasvtYGYRM3vLzOYG7fiboHyEmc0M2uuh4CFfzCw/mF8ULB+e0QPoYcwsbGbvmtlTwbzacQeY2VIze9/M5pjZrKAsbX/bSvTbkPLq3ZOAA4BvmtkBmY2qx7sHOLFV2ZXAi+4+CngxmIdku44KPhcBf+2mGHcFMeAn7n4AcATww+Dfntpy+0SBY939EGAscKKZHQHcDPzR3fcB1gPnB/XPB9YH5X8M6slmlwLzU+bVjjvui+4+NuU782n721ai37aWV++6eyPQ/OpdaYe7v8LW78I8Fbg3mL4XOC2l/D5PehPoY2aDuyXQHs7dV7v7O8F0Dcn/XIeittwuQXs0D1+YG3wcOBaYEpS3bsfm9p0CHGeZflF5D2FmZcBXgLuCeUPt2JXS9retRL9tQ4EVKfMrgzLZPoPcvXmElDXAoGBa7dsJQbfnocBM1JbbLehunkPyJenTgMXABndvHkEpta1a2jFYXg3079aAe64/AT9n84vu+6N23FEOPG9ms4PXt0Ma/7Z3ie/RS/Zwdzczfaezk8ysGHgUuMzdN6ZeFKktO8fd48BYM+sDPAbsn9mIdj1mdjKwzt1nm9mEDIeTDY5y91VmNhCYZmYLUhd29d+2rui3Ta/e7Rprm7uagp/Nw0+pfbfBzHJJJvl/uvu/g2K15Q5y9w3AdOBzJLs/my90UtuqpR2D5SVAZfdG2iN9HjjFzJaSvIV5LPBn1I47xN1XBT/XkTz5HE8a/7aV6LdNr97tGlOBc4Lpc4AnUsrPDp4qPQKoTum62q0F9zP/Acx39z+kLFJbbgczKw2u5DGzAuDLJJ93mA6cEVRr3Y7N7XsG8JLrrWK4+y/cvczdh5P8f/Ald/8WasftZmZFZtareRo4HviAdP5tu7s+2/gAE4GPSd7X+1Wm4+npH2AysBpoInkv6XyS9+ZeBBYCLwD9grpG8lsNi4H3gXGZjr+nfICjSN7Hew+YE3wmqi23ux3HAO8G7fgBcHVQPhJ4C1gEPALkB+WRYH5RsHxkpo+hp32ACcBTascdbr+RwNzgM685r6Tzb1uvwBUREcli6roXERHJYkr0IiIiWUyJXkREJIsp0YuIiGQxJXoREZEspkQvIiKSxZToRSSrmdm5Zva/mY5DJFOU6EUk41JeoyoiXUyJXqSHC16Z+bSZzTWzD8zsG2a21MwGBMvHmdmMYPpaM7vXzF41s2VmdrqZ/d7M3jezZ4P357e3n4lmtiAYUet2M3sqKB9vZm+Y2btm9rqZ7ReUn2tmj5vZtCCei83s8qDem2bWL6i3d7Dv2UFc+wfl95jZ38xsJvB7MxsbrPeemT1mZn2DejPMbFwwPSB433rz/v8dbHuhmf0+5Vi+a2Yfm9lbJN/T3lx+ZtCGc83sla77LYn0XEr0Ij3ficCn7n6Iux8EPNtB/b1JDjpyCvAAMN3dDwbqSY4nvhUziwB/B05y988ApSmLFwBHu/uhwNXAb1OWHQScDnwWuBGoC+q9AZwd1JkE/CjY7k+BO1PWLwOOdPfLgfuAK9x9DMlXfV7TwXECjAW+ARwMfMPMhgUDgvyGZII/Cjggpf7VwAnufkjQPiJZT91lIj3f+8BtZnYzyXeMv5o6XG0b/uPuTWb2PhBm84nB+8DwdtbZH/jE3ZcE85OB5nGyS4B7zWwUyffvp/YKTHf3GqDGzKqBJ1P2NcaSw+weCTySEnN+yvqPuHvczEqAPu7+clB+L8l3pXfkRXevBjCzD4G9gAHADHcvD8ofAvYN6v8XuMfMHgb+3cb2RLKOEr1ID+fuH5vZYSQHtbnBzF4EYmzukYu0WiUarJcwsybfPKBFgh37m7+eZEL/qpkNB2a03lfK9qMp0zlBjBvcfWw7297Uif13eKyBOB0cn7t/z8wOJ9mzMdvMPuPuGj5Vspq67kV6ODMbQrJL/AHgFuAwYCnwmaDK17pgNx8BI4NEDsnu8GYlbB7/+tzt2ai7bwSWmNmZkBx+18wOaaNeNbDezI4Oir4DNF/dL2XzsZ5Bx2YCXzCz/sEzCWc2LzCzvd19prtfDZSz5TjfIllJiV6k5zsYeMvM5pC8b30DyXvQfzazWSSvZHeKu9cDPwCeNbPZQA1QHSz+PfA7M3uXHesR+BZwvpk1D8t5ajv1zgFuMbP3SN57vy4ovxX4frD/AZ04ltXAtSSfE/gvyfHnm90SPJj4AfA6yaFCRbKahqkVEQDMrNjday15M/0vwEJ3/2Om4xKRnaMrehFpdmHQazCPZHf93zMbjoh0BV3Ri+xmzOwxYESr4ivc/blMxCMi6aVELyIiksXUdS8iIpLFlOhFRESymBK9iIhIFlOiFxERyWL/PyvgymfhBeohAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Test Type</th>\n",
       "      <th>target</th>\n",
       "      <th>Homogeneity</th>\n",
       "      <th>AB Hypothesis</th>\n",
       "      <th>p value</th>\n",
       "      <th>Mean Difference</th>\n",
       "      <th>Effect Size</th>\n",
       "      <th>Observed Power</th>\n",
       "      <th>Comment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Non-Parametric</td>\n",
       "      <td>sum_gamerounds</td>\n",
       "      <td>Yes</td>\n",
       "      <td>Reject H0</td>\n",
       "      <td>0.0479</td>\n",
       "      <td>-0.2661</td>\n",
       "      <td>-0.0037</td>\n",
       "      <td>0.0060</td>\n",
       "      <td>A,B组有明显差异</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Test Type          target Homogeneity AB Hypothesis  p value  \\\n",
       "0  Non-Parametric  sum_gamerounds         Yes     Reject H0   0.0479   \n",
       "\n",
       "   Mean Difference  Effect Size  Observed Power    Comment  \n",
       "0          -0.2661      -0.0037          0.0060  A,B组有明显差异  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "AB_Test(df=data2, group='version', target='sum_gamerounds')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "9fb1d59132b473f3e61b55829eb790bf3bc537ee4092453a0aecbd08ee45a03d"
  },
  "kernelspec": {
   "display_name": "Python 3.9.7 ('base')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
